Меню
Публикации
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007
2006
2005
2004
2003
2002
2001
Главный редактор

НИКИФОРОВ
Владимир Олегович
д.т.н., профессор
Партнеры
doi: 10.17586/2226-1494-2020-20-2-243-248
УДК 004.052.42
ТЕСТИРОВАНИЕ МНОГОПОТОЧНЫХ ПРИЛОЖЕНИЙ С БЛОКИРОВКАМИ НА НЕАТОМАРНЫХ ПЕРЕМЕННЫХ
Читать статью полностью

Язык статьи - русский
Ссылка для цитирования:
Аннотация
Ссылка для цитирования:
Доронин О.В., Дергун К.И., Дергачев А.М., Ильина А.Г., Горлач С.П. Тестирование многопоточных приложений с блокировками на неатомарных переменных // Научно-технический вестник информационных технологий, механики и оптики. 2020. Т. 20. № 2. С. 243–248. doi: 10.17586/2226-1494-2020-20-2-243-248
Аннотация
Предмет исследования. Исследован существующий алгоритм фаззинг-тестирования для поиска ошибок типа гонки данных в многопоточных программных приложениях, реализованный в инструменте Google TSan. Недостатком исследованного алгоритма является отсутствие возможности тестирования программных приложений, использующих неатомарные переменные. Это исключает возможность применения подобного инструмента для тестирования современных приложений, реализующих совместный доступ программных потоков к данным. Предложен новый алгоритм фаззинг-тестирования многопоточных приложений и способ внедрения его в модуль фаззинг-тестирования инструмента Google TSan. Метод. При фаззинг-тестировании многопоточных приложений входными данными являются различные комбинации исполнения программных потоков. Предложенный метод фаззинг-тестирования многопоточных программных приложений строится на предположении, что ошибки в многопоточных приложениях проявляются только в точках переключения потоков — точках синхронизации. Планировщик потоков реализован максимально просто. Каждому потоку назначается маркер состояния, позволяющий отслеживать его активность в процессе работы программы. Поток может находиться в неизвестном состоянии (до первой точки синхронизации), в состоянии исполнения, в ожидании — в очереди на исполнение, а также в состоянии, когда поток исчерпал свой квант исполнения, но не достиг точки синхронизации. Подобное состояние потока при достижении точки синхронизации автоматически меняется на состояние ожидания. Управление потоками осуществляется с помощью отдельного программного потока, следящего за состояниями всех потоков и выставляющего потокам, исчерпавшим квант исполнения, соответствующий маркер. Механизм поиска ошибок внедряется в программный продукт на этапе компиляции при указании соответствующих опций. Основные результаты. В инструмент Google TSan внедрен новый модуль фаззинг-тестирования, который позволяет находить ошибки типа гонки данных в любых многопоточных приложениях как с синхронизацией доступа к разделяемым данным, так и при совместном доступе программных потоков к данным. Практическая значимость. Верификация многопоточных приложений с совместным доступом к данным, в частности использующих неатомарные переменные, особенно актуальна для высоконагруженных масштабируемых программных систем.
Ключевые слова: многопоточность, гонки данных, взаимоблокировки, инструменты поиска ошибок, фаззинг-тестирование
Список литературы
Список литературы
-
Гедич А.А., Зыков А.Г., Лаздин А.В., Поляков В.И. Поиск процедур по графу переходов функциональной программы при верификации вычислительных процессов // Известия высших учебных заведений. Приборостроение. 2014. Т. 57. № 4. С. 64–68.
-
Dechev D., Pirkelbauer P., Stroustrup B. Understanding and effectively preventing the ABA problem in descriptor-based lock-free designs // Proc. 13th IEEE International Symposium on Object/Component/Service-Oriented Real-Time Distributed Computing (ISORC 2010). 2010. V. 1. P. 185–192. doi: 10.1109/ISORC.2010.10
-
Multi-Threaded Programming Terminology – 2018 [Электронный ресурс]. URL: https://www.bogotobogo.com/cplusplus/multithreaded.php, свободный. Яз. англ. (дата обращения:18.01.2020).
-
Трудности многопоточного программирования [Электронный ресурс]. URL: https://poznayka.org/s9887t1.html, свободный. Яз. рус. (дата обращения:18.01.2020).
-
Race Condition vs. Data Race 2018 [Электронный ресурс]. URL: https://blog.regehr.org/archives/490, свободный. Яз. англ. (дата обращения: 18.01.2020).
-
Serebryany K., Iskhodzhanov T. ThreadSanitizer - Data race detection in practice // ACM International Conference Proceeding Series. 2009. P. 62–71. doi: 10.1145/1791194.1791203
-
Лукин М.А. Верификация параллельных автоматных программ // Научно-технический вестник информационных технологий, механики и оптики. 2014. T. 14. № 1(89). С. 60–66.
-
Никифоров В.В. Протокол предотвращения взаимного блокирования задач в системах реального времени // Известия высших учебных заведений. Приборостроение. 2014. Т. 57. № 12. С. 21–27.
-
Никифоров В.В., Тюгашев А.А. Доступ к разделяемым ресурсам в системах реального времени с переменными приоритетами задач // Известия высших учебных заведений. Приборостроение. 2016. Т. 59. № 11. С. 964–970. doi: 10.17586/0021-3454-2016-59-11-964-970
-
Triantafillou P. An approach to deadlock detection in multidatabases // Information Systems. 1997. V. 22. N 1. P. 39–55. doi: 10.1016/S0306-4379(97)00003-3
-
Дергун К.И., Доронин О.В. Фаззинг тестирование fine-grainedалгоритмов // Сборник тезисов докладов Конгресса молодых ученых [Электронный ресурс]. URL: https://kmu.itmo.ru/digests/article/1224, свободный. (дата обращения: 18.01.2020).
-
Doronin O., Dergun K., Dergachev A. Automatic fuzzy-scheduling of threads in Google Thread Sanitizer to detect errors in multithreaded code // CEUR Workshop Proceedings. 2019. V. 2344. P. 1–12.
-
ThreadSanitizer project: documentation, source code, dynamic annotations, unit tests [Электронный ресурс]. URL: http://code.google.com/p/data-race-test, свободный. Яз. англ. (дата обращения: 18.01.2020).
-
Саттон М., Грин А., Амини П. Fuzzing: исследование уязвимостей методом грубой силы. Москва: Символ-Плюс, 2009. 555 с.
-
Vallen A., Johansson V. Random testing with sanitizers to detect concurrency bugs in embedded avionics software [Электронный ресурс]. URL: http://www.diva-portal.org/smash/record.jsf?pid=diva2%3A1269941&dswid=8217, свободный. Яз. англ. (дата обращения: 18.01.2020).